function t(t, e) {
    var i = Object.keys(t);
    if (Object.getOwnPropertySymbols) {
        var n = Object.getOwnPropertySymbols(t);
        e && (n = n.filter((function (e) {
            return Object.getOwnPropertyDescriptor(t, e).enumerable
        }))), i.push.apply(i, n)
    }
    return i
}

function e(e) {
    for (var i = 1; arguments.length > i; i++) {
        var n = null != arguments[i] ? arguments[i] : {};
        i % 2 ? t(Object(n), !0).forEach((function (t) {
            s(e, t, n[t])
        })) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(n)) : t(Object(n)).forEach((function (t) {
            Object.defineProperty(e, t, Object.getOwnPropertyDescriptor(n, t))
        }))
    }
    return e
}

function i(t) {
    return i = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (t) {
        return typeof t
    } : function (t) {
        return t && "function" == typeof Symbol && t.constructor === Symbol && t !== Symbol.prototype ? "symbol" : typeof t
    }, i(t)
}

function n(t, e) {
    if (!(t instanceof e)) throw new TypeError("Cannot call a class as a function")
}

function o(t, e) {
    for (var i = 0; e.length > i; i++) {
        var n = e[i];
        n.enumerable = n.enumerable || !1, n.configurable = !0, "value" in n && (n.writable = !0), Object.defineProperty(t, n.key, n)
    }
}

function r(t, e, i) {
    return e && o(t.prototype, e), i && o(t, i), Object.defineProperty(t, "prototype", {writable: !1}), t
}

function s(t, e, i) {
    return e in t ? Object.defineProperty(t, e, {
        value: i,
        enumerable: !0,
        configurable: !0,
        writable: !0
    }) : t[e] = i, t
}

function a(t, e) {
    if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function");
    t.prototype = Object.create(e && e.prototype, {
        constructor: {
            value: t,
            writable: !0,
            configurable: !0
        }
    }), Object.defineProperty(t, "prototype", {writable: !1}), e && u(t, e)
}

function c(t) {
    return c = Object.setPrototypeOf ? Object.getPrototypeOf : function (t) {
        return t.__proto__ || Object.getPrototypeOf(t)
    }, c(t)
}

function u(t, e) {
    return u = Object.setPrototypeOf || function (t, e) {
        return t.__proto__ = e, t
    }, u(t, e)
}

function h(t, e) {
    if (e && ("object" == typeof e || "function" == typeof e)) return e;
    if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined");
    return function (t) {
        if (void 0 === t) throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
        return t
    }(t)
}

function l(t) {
    var e = function () {
        if ("undefined" == typeof Reflect || !Reflect.construct) return !1;
        if (Reflect.construct.sham) return !1;
        if ("function" == typeof Proxy) return !0;
        try {
            return Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], (function () {
            }))), !0
        } catch (t) {
            return !1
        }
    }();
    return function () {
        var i, n = c(t);
        if (e) {
            var o = c(this).constructor;
            i = Reflect.construct(n, arguments, o)
        } else i = n.apply(this, arguments);
        return h(this, i)
    }
}

var v = {}.toString, f = function (t, e) {
    return v.call(t) === "[object " + e + "]"
}, d = function (t) {
    return f(t, "String")
}, y = function (t) {
    return f(t, "Number")
}, p = function () {
    function t() {
        n(this, t), this.__events = void 0, this.__events = {}
    }

    return r(t, [{
        key: "on", value: function (t, e) {
            if (t && e) {
                var i = this.__events[t] || [];
                i.push(e), this.__events[t] = i
            }
        }
    }, {
        key: "emit", value: function (t, e) {
            var n = this;
            if (function (t) {
                var e = i(t);
                return null !== t && "object" === e || "function" === e
            }(t) && (t = (e = t) && e.type), t) {
                var o = this.__events[t];
                o && o.length && o.forEach((function (t) {
                    t.call(n, e)
                }))
            }
        }
    }, {
        key: "off", value: function (t, e) {
            var i = this.__events, n = i[t];
            if (n && n.length) if (e) for (var o = 0, r = n.length; r > o; o++) n[o] === e && (n.splice(o, 1), o--); else delete i[t]
        }
    }, {
        key: "getEvents", value: function () {
            return this.__events
        }
    }]), t
}(), g = function (t) {
    a(i, p);
    var e = l(i);

    function i(t, o) {
        var r;
        return n(this, i), (r = e.call(this)).context = void 0, r.canvas = void 0, r.attrs = void 0, r.isCanvasElement = void 0, r.context = t, r.canvas = o.canvas || t.canvas || {
            width: o.width || 0,
            height: o.height || 0
        }, r.attrs = o || {}, r.isCanvasElement = !0, r
    }

    return r(i, [{
        key: "width", get: function () {
            return this.canvas.width
        }, set: function (t) {
            this.canvas.width = t
        }
    }, {
        key: "height", get: function () {
            return this.canvas.height
        }, set: function (t) {
            this.canvas.height = t
        }
    }, {
        key: "getContext", value: function () {
            return this.context
        }
    }, {
        key: "getBoundingClientRect", value: function () {
            var t = this.attrs || {}, e = t.top, i = t.right, n = t.width, o = t.height, r = t.left, s = t.bottom;
            return {
                top: void 0 === e ? 0 : e,
                width: void 0 === n ? 0 : n,
                right: void 0 === i ? 0 : i,
                height: void 0 === o ? 0 : o,
                bottom: void 0 === s ? 0 : s,
                left: void 0 === r ? 0 : r
            }
        }
    }, {
        key: "setAttribute", value: function (t, e) {
            this.attrs[t] = e
        }
    }, {
        key: "addEventListener", value: function (t, e) {
            this.on(t, e)
        }
    }, {
        key: "removeEventListener", value: function (t, e) {
            this.off(t, e)
        }
    }, {
        key: "dispatchEvent", value: function (t, e) {
            this.emit(t, e)
        }
    }]), i
}();
var m = function (t, e) {
    return t ? function (t) {
        if (!t) return !1;
        if (1 !== t.nodeType || !t.nodeName || "canvas" !== t.nodeName.toLowerCase()) return !1;
        var e = !1;
        try {
            t.addEventListener("eventTest", (function () {
                e = !0
            })), t.dispatchEvent(new Event("eventTest"))
        } catch (t) {
            e = !1
        }
        return e
    }(t.canvas) ? t.canvas : new g(t, e) : null
};

function x(t, e) {
    try {
        return t.currentStyle ? t.currentStyle[e] : document.defaultView && document.defaultView.getComputedStyle(t, null).getPropertyValue(e)
    } catch (t) {
        return {width: 300, height: 150}[e]
    }
}

function w(t, e) {
    var i = e.get("el");
    if (!i) return t;
    var n = i.getBoundingClientRect(), o = n.top, r = void 0 === o ? 0 : o, s = n.left, a = void 0 === s ? 0 : s,
        c = parseFloat(x(i, "padding-left")) || 0, u = parseFloat(x(i, "padding-top")) || 0;
    return {x: t.x - a - c, y: t.y - r - u}
}

function b(t, e) {
    var i = e.get("landscape");
    if (!i) return t;
    if (f(i, "Function")) return i(t, e);
    var n = e.get("height");
    return {x: t.y, y: n - t.x}
}

var k = function (t, e) {
    var i = t.touches;
    if (!i || !i.length) return [b(w({x: t.clientX, y: t.clientY}, e), e)];
    i.length || (i = t.changedTouches || []);
    for (var n = [], o = 0, r = i.length; r > o; o++) {
        var s = i[o], a = s.x, c = s.y, u = s.clientX, h = s.clientY, l = void 0;
        l = y(a) || y(c) ? {x: a, y: c} : w({x: u, y: h}, e), n.push(b(l, e))
    }
    return n
}, _ = function (t, e) {
    var i = e.x - t.x, n = e.y - t.y;
    return Math.abs(i) > Math.abs(n) ? i > 0 ? "right" : "left" : n > 0 ? "down" : "up"
}, E = function (t, e) {
    var i = Math.abs(e.x - t.x), n = Math.abs(e.y - t.y);
    return Math.sqrt(i * i + n * n)
}, L = function () {
    function t(e) {
        var i = this, o = e.canvas, r = e.el;
        n(this, t), this.processEvent = void 0, this.canvas = void 0, this.startTime = 0, this.endTime = 0, this.startPoints = null, this.startDistance = 0, this.center = null, this.pressTimeout = void 0, this.eventType = null, this.direction = null, this.lastMoveTime = 0, this.prevMovePoints = null, this.prevMoveTime = 0, this.lastMovePoints = null, this.pinch = !1, this._click = function (t) {
            var e = k(t, i.canvas);
            t.points = e, i.emitEvent("click", t)
        }, this._start = function (t) {
            var e, n, o = k(t, i.canvas);
            o && (t.points = o, i.emitEvent("touchstart", t), i.reset(), i.startTime = Date.now(), i.startPoints = o, o.length > 1 ? (i.startDistance = E(o[0], o[1]), i.center = {
                x: (e = o[0]).x + ((n = o[1]).x - e.x) / 2,
                y: e.y + (n.y - e.y) / 2
            }) : i.pressTimeout = setTimeout((function () {
                var e = "press", n = "none";
                t.direction = n, i.emitStart(e, t), i.emitEvent(e, t), i.eventType = e, i.direction = n
            }), 250))
        }, this._move = function (t) {
            var e = k(t, i.canvas);
            if (e) {
                t.points = e, i.emitEvent("touchmove", t);
                var n = i.startPoints;
                if (n) if (e.length > 1) {
                    var o = i.startDistance, r = E(e[0], e[1]);
                    t.zoom = r / o, t.center = i.center, i.emitStart("pinch", t), i.emitEvent("pinch", t)
                } else {
                    var s = e[0].x - n[0].x, a = e[0].y - n[0].y, c = i.direction || _(n[0], e[0]);
                    i.direction = c;
                    var u = i.getEventType(e);
                    t.direction = c, t.deltaX = s, t.deltaY = a, i.emitStart(u, t), i.emitEvent(u, t);
                    var h = i.lastMoveTime, l = Date.now();
                    l - h > 0 && (i.prevMoveTime = h, i.prevMovePoints = i.lastMovePoints, i.lastMoveTime = l, i.lastMovePoints = e)
                }
            }
        }, this._end = function (t) {
            var e = k(t, i.canvas);
            t.points = e, i.emitEnd(t), i.emitEvent("touchend", t);
            var n = i.lastMoveTime;
            if (100 > Date.now() - n) {
                var o = n - (i.prevMoveTime || i.startTime);
                if (o > 0) {
                    var r = i.prevMovePoints || i.startPoints, s = i.lastMovePoints;
                    if (!r || !s) return;
                    var a = E(r[0], s[0]) / o;
                    a > .3 && (t.velocity = a, t.direction = _(r[0], s[0]), i.emitEvent("swipe", t))
                }
            }
            i.reset();
            var c = t.touches;
            c && c.length > 0 && i._start(t)
        }, this._cancel = function (t) {
            i.emitEvent("touchcancel", t), i.reset()
        }, this.canvas = o, this.delegateEvent(r), this.processEvent = {}
    }

    return r(t, [{
        key: "delegateEvent", value: function (t) {
            t.addEventListener("click", this._click), t.addEventListener("touchstart", this._start), t.addEventListener("touchmove", this._move), t.addEventListener("touchend", this._end), t.addEventListener("touchcancel", this._cancel)
        }
    }, {
        key: "emitEvent", value: function (t, e) {
            this.canvas.emit(t, e)
        }
    }, {
        key: "getEventType", value: function (t) {
            var e, i = this.eventType, n = this.startTime, o = this.startPoints;
            if (i) return i;
            var r = this.canvas.__events.pan;
            if (r && r.length) {
                var s = Date.now();
                if (!o) return;
                e = s - n > 250 && 10 > E(o[0], t[0]) ? "press" : "pan"
            } else e = "press";
            return this.eventType = e, e
        }
    }, {
        key: "enable", value: function (t) {
            this.processEvent[t] = !0
        }
    }, {
        key: "isProcess", value: function (t) {
            return this.processEvent[t]
        }
    }, {
        key: "emitStart", value: function (t, e) {
            this.isProcess(t) || (this.enable(t), this.emitEvent("".concat(t, "start"), e))
        }
    }, {
        key: "emitEnd", value: function (t) {
        }
    }, {
        key: "clearPressTimeout", value: function () {
            this.pressTimeout && (clearTimeout(this.pressTimeout), this.pressTimeout = null)
        }
    }, {
        key: "reset", value: function () {
            this.clearPressTimeout(), this.startTime = 0, this.startPoints = null, this.startDistance = 0, this.direction = null, this.eventType = null, this.pinch = !1, this.prevMoveTime = 0, this.prevMovePoints = null, this.lastMoveTime = 0, this.lastMovePoints = null
        }
    }]), t
}(), P = function (t) {
    a(o, p);
    var e = l(o);

    function o(t) {
        var i;
        n(this, o), (i = e.call(this))._attrs = {}, i._isWindow = void 0, i._attrs = Object.assign({}, t), i._isWindow = "undefined" != typeof window, i._initPixelRatio(), i._initCanvas();
        return ["createImage", "toDataURL", "requestAnimationFrame"].forEach((function (e) {
            i._initAttrs(e, t.canvas || i.get("el"))
        })), i
    }

    return r(o, [{
        key: "get", value: function (t) {
            return this._attrs[t]
        }
    }, {
        key: "set", value: function (t, e) {
            this._attrs[t] = e
        }
    }, {
        key: "_initAttrs", value: function (t, e) {
            var i = this;
            if (!this.get(t)) {
                this.set(t, (function () {
                    return e[t] ? e[t].apply(e, arguments) : i._isWindow ? window[t] ? (n = window)[t].apply(n, arguments) : "createImage" == t ? new Image : null : void 0;
                    var n
                }))
            }
        }
    }, {
        key: "_initCanvas", value: function () {
            var t, e, i = this.get("el"), n = this.get("context");
            if (!i && !n) throw Error("请指定 id、el 或 context!");
            t = i ? d(i) ? (e = i) ? document.getElementById(e) : null : i : m(n, this._attrs), n && t && !t.getContext && (t.getContext = function () {
                return n
            });
            var o = this.get("width") || function (t) {
                var e = x(t, "width");
                return "auto" === e && (e = t.offsetWidth), parseFloat(e)
            }(t) || t.width, r = this.get("height") || function (t) {
                var e = x(t, "height");
                return "auto" === e && (e = t.offsetHeight), parseFloat(e)
            }(t) || t.height;
            this.set("canvas", this), this.set("el", t), this.set("context", n || t.getContext("2d")), this.changeSize(o, r);
            var s = new L({canvas: this, el: t, parent: this.get("parent")});
            this.set("eventController", s)
        }
    }, {
        key: "_initPixelRatio", value: function () {
            this.get("pixelRatio") || this.set("pixelRatio", window && window.devicePixelRatio || 1)
        }
    }, {
        key: "changeSize", value: function (t, e) {
            var n, o = this.get("pixelRatio"), r = this.get("el");
            (r.style && (r.style.width = t + "px", r.style.height = e + "px"), (n = r) && "object" === i(n) && (1 === n.nodeType && n.nodeName || n.isCanvasElement)) && (r.width = t * o, r.height = e * o, 1 !== o && this.get("context").scale(o, o));
            this.set("width", t), this.set("height", e)
        }
    }, {
        key: "destroy", value: function () {
            if (!this.get("destroyed")) {
                var t = this.get("el");
                t.width = 0, t.height = 0, this.clear(), this._attrs = {}, this.set("destroyed", !0)
            }
        }
    }, {
        key: "clear", value: function () {
        }
    }, {
        key: "isDestroyed", value: function () {
            return this.get("destroyed")
        }
    }]), o
}();
var T = {
    penColor: "black",
    backgroundColor: "",
    openSmooth: !0,
    penSize: 2,
    minLineWidth: 2,
    maxLineWidth: 6,
    minSpeed: 1.5,
    maxWidthDiffRate: 20,
    maxHistoryLength: 20
}, M = function () {
    function t(e) {
        var i = this;
        n(this, t), this.canAddHistory = !0, this.points = [], this.historyList = [], this.canvas = void 0, this._isEmpty = !0, this.active = !1, this.getLineWidth = function (t) {
            var e = i.get("options"), n = e.minSpeed, o = e.minLineWidth, r = i.getMaxLineWidth();
            return Math.min(Math.max(r - (r - o) * t / Math.max(Math.min(n, 10), 1), o), r)
        }, this.drawTrapezoid = function (t, e, n, o) {
            var r = i.get("context");
            r.beginPath(), r.moveTo(Number(t.x.toFixed(1)), Number(t.y.toFixed(1))), r.lineTo(Number(e.x.toFixed(1)), Number(e.y.toFixed(1))), r.lineTo(Number(n.x.toFixed(1)), Number(n.y.toFixed(1))), r.lineTo(Number(o.x.toFixed(1)), Number(o.y.toFixed(1))), r.fillStyle = i.get("options").penColor, r.fill(), r.draw && r.draw(!0)
        }, this.drawNoSmoothLine = function (t, e) {
            e.lastX = t.x + .5 * (e.x - t.x), e.lastY = t.y + .5 * (e.y - t.y), "number" == typeof t.lastX && i.drawCurveLine(t.lastX, t.lastY, t.x, t.y, e.lastX, e.lastY, i.getMaxLineWidth())
        }, this.drawCurveLine = function (t, e, n, o, r, s, a) {
            a = Number(a.toFixed(1));
            var c = i.get("context");
            c.lineWidth = a, c.beginPath(), c.moveTo(Number(t.toFixed(1)), Number(e.toFixed(1))), c.quadraticCurveTo(Number(n.toFixed(1)), Number(o.toFixed(1)), Number(r.toFixed(1)), Number(s.toFixed(1))), c.stroke(), c.draw && c.draw(!0)
        }, this.getRadianData = function (t, e, i, n) {
            var o = i - t, r = n - e;
            if (0 === o) return {val: 0, pos: -1};
            if (0 === r) return {val: 0, pos: 1};
            var s = Math.abs(Math.atan(r / o));
            return i > t && e > n || t > i && n > e ? {val: s, pos: 1} : {val: s, pos: -1}
        }, this.getRadianPoints = function (t, e, i, n) {
            if (0 === t.val) return 1 === t.pos ? [{x: e, y: i + n}, {x: e, y: i - n}] : [{y: i, x: e + n}, {
                y: i,
                x: e - n
            }];
            var o = Math.sin(t.val) * n, r = Math.cos(t.val) * n;
            return 1 === t.pos ? [{x: e + o, y: i + r}, {x: e - o, y: i - r}] : [{x: e + o, y: i - r}, {
                x: e - o,
                y: i + r
            }]
        }, this.drawSmoothLine = function (t, e) {
            var n = e.x - t.x, o = e.y - t.y;
            if (Math.abs(n) + Math.abs(o) > 2 ? (e.lastX1 = t.x + .3 * n, e.lastY1 = t.y + .3 * o, e.lastX2 = t.x + .7 * n, e.lastY2 = t.y + .7 * o) : (e.lastX1 = e.lastX2 = t.x + .5 * n, e.lastY1 = e.lastY2 = t.y + .5 * o), e.perLineWidth = (t.lineWidth + e.lineWidth) / 2, "number" == typeof t.lastX1) {
                if (i.drawCurveLine(t.lastX2, t.lastY2, t.x, t.y, e.lastX1, e.lastY1, e.perLineWidth), t.isFirstPoint) return;
                if (t.lastX1 === t.lastX2 && t.lastY1 === t.lastY2) return;
                var r = i.getRadianData(t.lastX1, t.lastY1, t.lastX2, t.lastY2),
                    s = i.getRadianPoints(r, t.lastX1, t.lastY1, t.perLineWidth / 2),
                    a = i.getRadianPoints(r, t.lastX2, t.lastY2, e.perLineWidth / 2);
                i.drawTrapezoid(s[0], a[0], a[1], s[1])
            } else e.isFirstPoint = !0
        }, this.addHistory = function () {
            var t = i.get("options").maxHistoryLength;
            if (t && i.canAddHistory) if (i.canAddHistory = !1, i.get("createImage")) {
                var e = null;
                e = i.get("createImage")();
                var n = i.get("toDataURL") && i.get("toDataURL")();
                d(n) ? e.src = n : n.then((function (t) {
                    e.src = t
                })), e.onload = function () {
                    i.historyList.push(e), i.historyList = i.historyList.slice(-t)
                }
            } else i.historyList.length++
        }, this.drawByImage = function (t) {
            var e = i.get("context"), n = i.get("width"), o = i.get("height");
            e.clearRect(0, 0, n, o);
            try {
                e.drawImage(t, 0, 0, n, o), e.draw && e.draw(!0)
            } catch (t) {
                i.historyList.length = 0
            }
        }, this.isEmpty = function () {
            return i.get("options").maxHistoryLength > 0 ? 0 === i.historyList.length : i._isEmpty
        }, this.clear = function () {
            var t = i.get("context");
            t.clearRect(0, 0, i.get("width"), i.get("height")), t.draw && t.draw(), i._isEmpty = !0, i.historyList.length = 0
        }, this.undo = function () {
            if (0 === i.get("options").maxHistoryLength && i.clear(), i.get("createImage") && i.historyList.length) {
                var t = i.historyList.splice(-1)[0];
                i.drawByImage(t), 0 === i.historyList.length && i.clear()
            }
        }, this.canvas = e, this.canvas.set("pen", T), this.init()
    }

    return r(t, [{
        key: "getOption", value: function () {
        }
    }, {
        key: "setOption", value: function () {
            var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}, i = e({}, t),
                n = i.maxLineWidth;
            if (n && t.penSize && n == T.maxLineWidth) {
                var o = Math.max(n, t.penSize);
                i.maxLineWidth = o
            }
            this.canvas.set("pen", Object.assign({}, T, i))
        }
    }, {
        key: "get", value: function (t) {
            return this.canvas.get("options" == t ? "pen" : t)
        }
    }, {
        key: "init", value: function () {
            var t = this;
            this.get("context").lineCap = "round", this.canvas.on("touchstart", (function (e) {
                return t.onDrawStart(e)
            })), this.canvas.on("touchmove", (function (e) {
                return t.onDrawMove(e)
            })), this.canvas.on("touchend", (function (e) {
                return t.onDrawEnd(e)
            }))
        }
    }, {
        key: "drawBackground", value: function () {
            var t = this.get("context"), e = this.get("width"), i = this.get("height"), n = this.get("options"),
                o = n.backgroundColor, r = n.backgroundImage;
            o && (t.fillStyle = o, t.fillRect(0, 0, e, i), t.draw && t.draw(!0)), r && this.drawByImage(r)
        }
    }, {
        key: "remove", value: function () {
            var t = this;
            this.canvas.off("touchstart", (function (e) {
                return t.onDrawStart(e)
            })), this.canvas.off("touchmove", (function (e) {
                return t.onDrawMove(e)
            })), this.canvas.off("touchend", (function (e) {
                return t.onDrawEnd(e)
            }))
        }
    }, {
        key: "disableScroll", value: function (t) {
            t.preventDefault && this.get("options").disableScroll && t.preventDefault()
        }
    }, {
        key: "onDrawStart", value: function (t) {
            this.disableScroll(t);
            var e = t.points;
            if (this.active) {
                this.canAddHistory = !0, this.get("context").strokeStyle = this.get("options").penColor;
                var i = e[0];
                this.initPoint(i.x, i.y)
            }
        }
    }, {
        key: "onDrawMove", value: function (t) {
            if (this.disableScroll(t), this.active) {
                var e = t.points[0];
                this.initPoint(e.x, e.y), this.onDraw()
            }
        }
    }, {
        key: "onDrawEnd", value: function (t) {
            this.active && (this.canAddHistory = !0, this.points = [])
        }
    }, {
        key: "onDraw", value: function () {
            var t = this, e = this.get("context");
            if (this.points.length >= 2) {
                this.addHistory(), e.lineWidth = this.get("options").penSize || 2;
                var i = this.points.slice(-1)[0], n = this.points.slice(-2, -1)[0], o = function () {
                    t._isEmpty = !1, t.get("options").openSmooth ? t.drawSmoothLine(n, i) : t.drawNoSmoothLine(n, i)
                };
                "function" == typeof this.get("el").requestAnimationFrame ? this.get("el").requestAnimationFrame((function () {
                    return o()
                })) : o()
            }
        }
    }, {
        key: "getMaxLineWidth", value: function () {
            var t = this.get("options");
            return Math.min(t.penSize, t.maxLineWidth)
        }
    }, {
        key: "initPoint", value: function (t, e) {
            var i = {x: t, y: e, t: Date.now()}, n = this.points.slice(-1)[0];
            if (!n || n.t !== i.t && (n.x !== t || n.y !== e)) {
                if (this.get("options").openSmooth && n) {
                    var o = this.points.slice(-2, -1)[0];
                    if (i.distance = Math.sqrt(Math.pow(i.x - n.x, 2) + Math.pow(i.y - n.y, 2)), i.speed = i.distance / (i.t - n.t || .1), i.lineWidth = this.getLineWidth(i.speed), o && o.lineWidth && n.lineWidth) {
                        var r = (i.lineWidth - n.lineWidth) / n.lineWidth,
                            s = this.get("options").maxWidthDiffRate / 100;
                        if (s = s > 1 ? 1 : .01 > s ? .01 : s, Math.abs(r) > s) i.lineWidth = n.lineWidth * (1 + (r > 0 ? s : -s))
                    }
                }
                this.points.push(i), this.points = this.points.slice(-3)
            }
        }
    }]), t
}(), S = function () {
    function t(e) {
        n(this, t), this.canvas = void 0, this._ee = void 0, this.pen = void 0;
        var i = new P(e);
        i.set("parent", this), this.canvas = i, this._ee = new p, this.pen = new M(i), this.init()
    }

    return r(t, [{
        key: "init", value: function () {
            this.pen.active = !0
        }
    }, {
        key: "destroy", value: function () {
            this.canvas.destroy()
        }
    }, {
        key: "clear", value: function () {
            this.pen.clear()
        }
    }, {
        key: "undo", value: function () {
            this.pen.undo()
        }
    }, {
        key: "save", value: function () {
        }
    }, {
        key: "isEmpty", value: function () {
            return this.pen.isEmpty()
        }
    }, {
        key: "on", value: function (t, e) {
            this._ee.on(t, e)
        }
    }, {
        key: "emit", value: function (t, e) {
            this._ee.emit(t, e)
        }
    }, {
        key: "off", value: function (t, e) {
            this._ee.off(t, e)
        }
    }]), t
}();
export default S;
export {S as Signature};
